/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DBManager;

/**
 *
 * @author manuel
 */
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ManejoBD {

    private Connection conexionOracle;
    private Connection conexionDB2;

    public ManejoBD() {
        conexionOracle = null;
        conexionDB2 = null;

    }

    /*
     * Metodo encargado de agregar un producto a la base de datos
     */
    public int agregaClienteOracle(int cedula, String nombre, String direccion, String sexo, String telefono) {
        try {

            PreparedStatement instruccionAgregaCliente = conexionOracle.prepareStatement(
                    "INSERT INTO CLIENTE VALUES (?,?,?,?,?); ");

            instruccionAgregaCliente.setInt(1, cedula);
            instruccionAgregaCliente.setString(2, nombre);
            instruccionAgregaCliente.setString(3, direccion);
            instruccionAgregaCliente.setString(4, sexo);
            instruccionAgregaCliente.setString(5, telefono);


            instruccionAgregaCliente.executeUpdate();
            instruccionAgregaCliente.close();


        } catch (Exception ex) {
            return 0;
        }
        return 1;
    }

    public int agregaCuentaOracle(int cedula, String idComercio, String numeroCuenta, int saldo) {
        try {

            PreparedStatement instruccionAgregaCliente = conexionOracle.prepareStatement(
                    "INSERT INTO CLIENTE VALUES (?,?,?,?,?); ");

            instruccionAgregaCliente.setInt(1, cedula);
            instruccionAgregaCliente.setString(2, numeroCuenta);
            instruccionAgregaCliente.setInt(3, saldo);


            instruccionAgregaCliente.executeUpdate();
            instruccionAgregaCliente.close();


        } catch (Exception ex) {
            return 0;
        }
        return 1;
    }

    public int agregaTransferenciaOracle(String idComercio, int monto, String idTransferencia, String fecha, String hora) {
        try {

            PreparedStatement instruccionAgregaCliente = conexionOracle.prepareStatement(
                    "INSERT INTO TRANSFERENCIA VALUES (?,?,?,?,?); ");

            instruccionAgregaCliente.setString(1, idComercio);
            instruccionAgregaCliente.setInt(2, monto);
            instruccionAgregaCliente.setString(3, idTransferencia);
//            instruccionAgregaCliente.setDate(4, );
            instruccionAgregaCliente.setString(5, hora);


            instruccionAgregaCliente.executeUpdate();
            instruccionAgregaCliente.close();


        } catch (Exception ex) {
            return 0;
        }
        return 1;
    }

    
     /**
     * carga el archivo y lo parsea haciendo las inserciones necesarias
     *
     * @param filename nombre del archivo
     */
    public void loadData(String filename) {
        BufferedReader br = null;
        String comando;
        try {

            String[] spltComando;

            br = new BufferedReader(new FileReader(filename));
            String sCurrentLine;
            while ((sCurrentLine = br.readLine()) != null) {
                comando = br.readLine();

                if (comando.startsWith("Cliente: ")) {
                    comando = comando.substring(9);
                    spltComando = comando.split(", ");
                    if (spltComando.length == 5) {
                        agregaClienteOracle(Integer.parseInt(spltComando[0]), spltComando[1], spltComando[2], spltComando[3], spltComando[4]);
                    }


                }//termina cliente
                else if (comando.startsWith("Cuenta: ")) {
                    comando = comando.substring(8);
                    spltComando = comando.split(", ");
                    if (spltComando.length == 5) {
                        agregaCuentaOracle(Integer.parseInt(spltComando[0]), spltComando[1], spltComando[3], Integer.parseInt(spltComando[2]));
                    }

                }//termina cuenta
                else if (comando.startsWith("Transferencia: ")) {
                    comando = comando.substring(15);
                    spltComando = comando.split(", ");
                    if (spltComando.length == 5) {
                        agregaTransferenciaOracle(spltComando[0], Integer.parseInt(spltComando[1]), spltComando[2], spltComando[3], spltComando[4]);
                    }

                }//termina transferencia
                else if (comando.startsWith("Comercio: ")) {
                    comando = comando.substring(10);
                    spltComando = comando.split(", ");
                    if (spltComando.length == 5) {
                        insertComercio(spltComando[0], spltComando[1], spltComando[2], spltComando[3], spltComando[4]);
                    }

                }//termina comercio
                else if (comando.startsWith("Alerta: ")) {
                    comando = comando.substring(8);

                    spltComando = comando.split(", ");

                    if (spltComando.length == 5) {
                        insertAlerta(spltComando[0], spltComando[1], spltComando[2], spltComando[3], spltComando[4]);
                    }
                }//alertas





            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null) {
                    br.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }



    }//termina loadData
    

      boolean insertComercio(String idComercio, String nombre, String tipo, String direccion, String idCuenta) {

        return false;
    }

    boolean insertAlerta(String id, String fecha, String hora, String idTransf, String descripcion) {

        return false;
    }

    //metodo para manejar errores
    public void error(String msg) {
        System.err.println(msg);
    }
    
    /*
     * Metodo encargado de establecer la conexion por medio de la clase ConexionBD
     */
    public void conectarBDOracle() {
        conexionOracle = ConexionOracle.getConnection();
    }

    public void conectarDB2() {
        conexionDB2 = ConexionDB2.getConnection();
    }

    /*
     * Metodo encargado de seleccionar los productos y retornar un objeto producto
     */
//    public Producto seleccionaProducto(String codigo) {
//        PreparedStatement instruccion = null;
//        Producto productoSeleccionado = new Producto();
//
//        try {
//
//            instruccion = conexion.prepareStatement(Constantes.SELECCIONA_PRODUCTO);
//
//            instruccion.setString(1, codigo);
//            ResultSet result = instruccion.executeQuery();
//
//            while (result.next()) {
//                productoSeleccionado.setCodigo(result.getString(1));
//                productoSeleccionado.setDescripcion(result.getString(2));
//                productoSeleccionado.setPrecio(result.getLong(3));
//                productoSeleccionado.setCantidad(result.getInt(4));
//            }
//        } catch (Exception ex) {
//            System.out.println(ex);
//        } finally {
//
//            if (instruccion != null) {
//                try {
//                    instruccion.close();
//                } catch (SQLException sqlEx) {
//                } // ignore
//
//                instruccion = null;
//            }
//        }
//        return productoSeleccionado;
//    }
//
//    /*
//     * Metodo encargado de borrar un producto de acuerdo a su codigo
//     */
//    public String borraProducto(String codigo) {
//        PreparedStatement instruccion = null;
//
//        try {
//
//            instruccion = conexion.prepareStatement(Constantes.ELIMINA_PRODUCTO);
//
//
//            instruccion.setString(1, codigo);
//
//            instruccion.executeUpdate();
//        } catch (Exception ex) {
//            return Constantes.RESPUESTA_ESTADO_ERROR;
//        } finally {
//
//            if (instruccion != null) {
//                try {
//                    instruccion.close();
//                } catch (SQLException sqlEx) {
//                } // ignore
//
//                instruccion = null;
//            }
//        }
//        return Constantes.RESPUESTA_ESTADO_EXITO;
//    }
//
//    /*
//     * Metodo que modifica un producto ya existente
//     */
//    public String modificaProducto(Producto producto) {
//        try {
//
//            PreparedStatement instruccionModificaProducto = conexion.prepareStatement(
//                    Constantes.MODIFICA_PRODUCTO);
//
//            instruccionModificaProducto.setString(1, producto.getDescripcion());
//            instruccionModificaProducto.setLong(2, producto.getPrecio());
//            instruccionModificaProducto.setInt(3, producto.getcantidad());
//            instruccionModificaProducto.setString(4, producto.getCodigo());
//            System.out.println(instruccionModificaProducto.toString());
//
//            instruccionModificaProducto.executeUpdate();
//            instruccionModificaProducto.close();
//
//
//        } catch (Exception ex) {
//            return Constantes.RESPUESTA_ESTADO_ERROR;
//        }
//        return Constantes.RESPUESTA_ESTADO_EXITO;
//    }
}